package com.ely.coupon.activity.dto;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ely.coupon.activity.validation.CheckName;
import com.ely.coupon.activity.validation.CheckType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 活动优惠券
 * 1. 学习能力
 * 2. 解决问题的能力
 * 3.
 */
@Data
@Validated
@ApiModel("优惠券活动参数对象")
public class CouponActivityDto {
    /**
     * 主键
     */

    private Long couponActivityId;

    /**
     * 卡券名称
     */
    @NotNull
    @CheckName(message = "卡券名称已存在")
    private String couponName;

    /**
     * 1 表示 无门槛 2 表示满减,3 表示折扣券,4 随机立减
     */
    @CheckType(value = {1, 2, 3, 4}, message = "参数格式不正确")
    private Integer couponType;

    /**
     * 满减
     */
    private BigDecimal fullDecreaseAmount;

    /**
     * 满减金额
     */
    private BigDecimal decreaseAmount;

    /**
     * 折扣
     */
    private Integer discount;

    /**
     * 优惠卷限制规则 1 全平台 2 平台品类可用  3 商家可用,4 商家品类, 5 指定商品
     */
    private Integer couponScope;

    /**
     * 最多领取数
     */
    private Integer maxReceiveCount;

    /**
     * 优惠卷的库存
     */
    private Integer couponQuantity;

    /**
     * 1 临时 2 固定期限
     */
    private Integer expiryDateType;

    /**
     * 优惠券临时有效  表示领取天数
     */
    private Integer expiryDay;

    /**
     * 固定期限   开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date expiryStartDate;

    /**
     * 固定期限   结束时间
     */
    private Date expiryEndDate;

    /**
     * 创建时间
     */
    private Date createDate;

    /**
     * 更新时间
     */
    private Date updateDate;

    /**
     * 0 表示未启用  1暂停  2下架
     */
    private Integer status;
}